package main

import (
	stream "csv-stream"
	"fmt"
)

// 使用示例
func main() {

	// New 将表格data.csv的数据读入stream（文件路径可传多个，会把多份CSV读进stream里）
	csv, err := stream.New("./demo/data.csv")
	if err != nil {
		panic(err)
	}

	// Distinct 按第1列的值进行去重
	csv = csv.Distinct(0)

	// Filter 排除表头（去掉第1列值为'id'的行数据）
	csv = csv.Filter(func(row stream.Row) bool {
		return row[0] != "id"
	})

	// Map 给第2列的值追加一个'-test'后缀
	csv.Map(func(row stream.Row) stream.Row {
		row[1] = row[1] + "-test"
		return row
	})

	// Collect 获取最终表格数据
	table := csv.Collect()
	fmt.Println("table:", table)

	// Save 可将结果写入另外个CSV
	err = csv.Save("./demo/data1.csv", stream.Row{"id", "name"})
	if err != nil {
		panic(err)
	}

	// Values 单独抽出第1列的数据
	values := csv.Values(0)
	fmt.Println("id:", values)

	// Handle 批处理最终得到的表格数据
	err = csv.Handle(func(row stream.Row) error {

		// 可以生成SQL语句
		sql := fmt.Sprintf("INSERT INTO table_name (id,name) VALUES (%v,%v)", row[0], row[1])
		fmt.Println("SQL:", sql)

		// 或者调用HTTP接口
		/*
			reply, err := stream.Post("http://127.0.0.1:8080/test/submit", fmt.Sprintf("{\"id\":%v,\"name\":\"%v\"}", row[0], row[1]))
			if err != nil {
				return err
			}
			fmt.Println(string(reply))
		*/

		// 更多操作
		// ......

		// 如果在循环中返回报错，会立即终止循环
		return nil
	})

	if err != nil {
		panic(err)
	}
}
